home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / mswlogo3.zip / MSWLOGO.ZIP / EXAMPLES.ZIP / TTT < prev    next >
Text File  |  1993-04-13  |  4KB  |  234 lines

  1. ;
  2. ; Function:
  3. ;
  4. ; Tic Tac Toc game
  5. ;
  6. ; To run:
  7. ;
  8. ; Load "ttt
  9. ; Call TTT
  10. ;
  11. TO BEST :LIST
  12. OP BEST1 FIRST :LIST LAST :LIST :YOURWINS
  13. END
  14.  
  15. TO BEST1 :BOX1 :BOX2 :WINS
  16. IF EMPTYP :WINS [OP :BOX2]
  17. IF MEMBERP :BOX1 FIRST :WINS [OP BEST2 :BOX1 :BOX2 BF :WINS]
  18. OP BEST1 :BOX1 :BOX2 BF :WINS
  19. END
  20.  
  21. TO BEST2 :BOX1 :BOX2 :WINS
  22. IF EMPTYP :WINS [OP :BOX2]
  23. IF MEMBERP :BOX1 FIRST :WINS [OP :BOX1]
  24. OP BEST2 :BOX1 :BOX2 BF :WINS
  25. END
  26.  
  27. TO BOARD
  28. CS HT
  29. DRAWLINE [-20 -50] 0 120
  30. DRAWLINE [20 -50] 0 120
  31. DRAWLINE [-60 -10] 90 120
  32. DRAWLINE [-60 30] 90 120
  33. END
  34.  
  35. TO CHOOSE :SIDE
  36. PR :SIDE
  37. IF EQUALP :SIDE "X [CHOOSEX STOP]
  38. IF EQUALP :SIDE "O [CHOOSEO STOP]
  39. TYPE [HUH? TYPE X OR O:]
  40. CHOOSE RC
  41. END
  42.  
  43. TO CHOOSEO
  44. MAKE "ME "X
  45. MAKE "YOU "O
  46. END
  47.  
  48. TO CHOOSEX
  49. MAKE "ME "O
  50. MAKE "YOU "X
  51. END
  52.  
  53. TO DRAW :WHO :BOX
  54. RUN SE WORD "DRAW :WHO :BOX
  55. END
  56.  
  57. TO DRAWLINE :POS :HEAD :LEN
  58. PU
  59. SETPOS :POS
  60. SETH :HEAD
  61. PD
  62. FD :LEN
  63. END
  64.  
  65. TO DRAWO :BOX
  66. MOVE :BOX
  67. O
  68. END
  69.  
  70. TO DRAWX :BOX
  71. MOVE :BOX
  72. X
  73. END
  74.  
  75. TO FORK1 :LIST
  76. IF EMPTYP :LIST [OP "FALSE]
  77. IF THING WORD "HIT FIRST :LIST [MEPLAY FIRST :LIST OP "TRUE]
  78. MAKE WORD "HIT FIRST :LIST "TRUE
  79. OP FORK1 BF :LIST
  80. END
  81.  
  82. TO FORKMOVE :LISTS
  83. IF EMPTYP :LISTS [OP "FALSE]
  84. IF FORK1 FIRST :LISTS [OP "TRUE]
  85. OP FORKMOVE BF :LISTS
  86. END
  87.  
  88. TO GETMOVE
  89. TYPE [YOUR MOVE:]
  90. OP TRYMOVE RC
  91. END
  92.  
  93. TO INIT
  94. MAKE "FREE [5 1 3 7 9 2 4 6 8]
  95. MAKE "MYWINS []
  96. MAKE "YOURWINS []
  97. MAKE "FREEWINS [[1 5 9] [3 5 7] [1 2 3] [4 5 6] [7 8 9]     ~
  98.                 [1 4 7] [2 5 8] [3 6 9]]
  99. PR [DO YOU WANT TO PLAY FIRST (X)]
  100. TYPE [OR SECOND (O)? TYPE X OR O:]
  101. CHOOSE RC
  102. PR [FOR EACH MOVE, TYPE DIGIT 1-9.]
  103. END
  104.  
  105. TO MEPLAY :BOX
  106. DRAW :ME :BOX
  107. PLAY :BOX "MYWINS "YOURWINS
  108. END
  109.  
  110. TO MOVE :BOX
  111. PU
  112. SETPOS THING WORD "BOX :BOX
  113. END
  114.  
  115. TO O
  116. SETH 0
  117. PU
  118. FD 8
  119. PD
  120. REPEAT 8 [FD 12 RT 45]
  121. END
  122.  
  123. TO PICKMOVE
  124. LOCAL [HIT1 HIT2 HIT3 HIT4 HIT5 HIT6 HIT7 HIT8 HIT9]
  125. IF WINMOVE SINGLE :MYWINS [OP "TRUE]
  126. IF WINMOVE SINGLE :YOURWINS [OP "FALSE]
  127. ZEROHITS :FREE
  128. IF FORKMOVE :MYWINS [OP "FALSE]
  129. IF NOT EMPTYP :MYWINS [MEPLAY BEST FIRST :MYWINS OP "FALSE]
  130. MEPLAY FIRST :FREE
  131. OP "FALSE
  132. END
  133.  
  134. TO PLAY :BOX :PLAYER :OTHER
  135. MAKE "FREE REMOVE :BOX :FREE
  136. MAKE :PLAYER SHORTEN :BOX THING :PLAYER
  137. MAKE :OTHER STRIP :BOX THING :OTHER
  138. MAKE "FREEWINS UNFREE :BOX :PLAYER :FREEWINS
  139. END
  140.  
  141. TO PLAYLOOP
  142. IF EMPTYP :FREE [PR [TIE!] STOP]
  143. IF GETMOVE [PR [YOU WIN!] STOP]
  144. IF EMPTYP :FREE [PR [TIE!] STOP]
  145. IF PICKMOVE [PR [I WIN!] STOP]
  146. PLAYLOOP
  147. END
  148.  
  149. TO REMOVE :THING :LIST
  150. IF EMPTYP :LIST [OP []]
  151. IF EQUALP :THING FIRST :LIST [OP BF :LIST]
  152. OP FPUT FIRST :LIST REMOVE :THING BF :LIST
  153. END
  154.  
  155. TO SHORTEN :BOX :LIST
  156. IF EMPTYP :LIST [OP []]
  157. IF MEMBERP :BOX FIRST :LIST     ~
  158.    [OP FPUT REMOVE :BOX FIRST :LIST SHORTEN :BOX BF :LIST]
  159. OP FPUT FIRST :LIST SHORTEN :BOX BF :LIST
  160. END
  161.  
  162. TO SINGLE :LIST
  163. IF EMPTYP :LIST [OP []]
  164. IF EMPTYP BF FIRST :LIST [OP FIRST FIRST :LIST]
  165. OP SINGLE BF :LIST
  166. END
  167.  
  168. TO STRIP :BOX :LIST
  169. IF EMPTYP :LIST [OP []]
  170. IF MEMBERP :BOX FIRST :LIST [OP STRIP :BOX BF :LIST]
  171. OP FPUT FIRST :LIST STRIP :BOX BF :LIST
  172. END
  173.  
  174. TO TRYMOVE :BOX
  175. PR :BOX
  176. IF NOT MEMBERP :BOX :FREE [PR [NOT A VALID MOVE.] OP GETMOVE]
  177. YOUPLAY :BOX
  178. OP MEMBERP [] :YOURWINS
  179. END
  180.  
  181. TO TTT
  182. LOCAL [MYWINS YOURWINS FREEWINS FREE ME YOU]
  183. SS
  184. BOARD
  185. INIT
  186. IF EQUALP :ME "X [MEPLAY 5]
  187. PLAYLOOP
  188. END
  189.  
  190. TO UNFREE :BOX :PLAYER :LIST
  191. IF EMPTYP :LIST [OP []]
  192. IF MEMBERP :BOX FIRST :LIST ~
  193.    [MAKE :PLAYER FPUT REMOVE :BOX FIRST :LIST THING :PLAYER ~
  194.     OP UNFREE :BOX :PLAYER BF :LIST]
  195. OP FPUT FIRST :LIST UNFREE :BOX :PLAYER BF :LIST
  196. END
  197.  
  198. TO WINMOVE :MOVE
  199. IF EMPTYP :MOVE [OP "FALSE]
  200. MEPLAY :MOVE
  201. OP "TRUE
  202. END
  203.  
  204. TO X
  205. SETH 45
  206. PD
  207. FD 40
  208. BK 20
  209. RT 90
  210. FD 20
  211. BK 40
  212. END
  213.  
  214. TO YOUPLAY :BOX
  215. DRAW :YOU :BOX
  216. PLAY :BOX "YOURWINS "MYWINS
  217. END
  218.  
  219. TO ZEROHITS :LIST
  220. IF EMPTYP :LIST [STOP]
  221. MAKE WORD "HIT FIRST :LIST "FALSE
  222. ZEROHITS BF :LIST
  223. END
  224.  
  225. MAKE "BOX1 [-54 36]
  226. MAKE "BOX2 [-14 36]
  227. MAKE "BOX3 [26 36]
  228. MAKE "BOX4 [-54 -4]
  229. MAKE "BOX5 [-14 -4]
  230. MAKE "BOX6 [26 -4]
  231. MAKE "BOX7 [-54 -44]
  232. MAKE "BOX8 [-14 -44]
  233. MAKE "BOX9 [26 -44]
  234.